package com.gameley.dmgtpf.common.utils;
/**
 * token编码工具类
 **
 * @qualiFild TokenEncryptUtils.java<br>
 * @author：LiBencheng<br>
 * @date Created on 2021年7月30日<br>
 * @version 1.0<br>
 */
public class TokenEncryptUtils
{
    // 编码密码,可自定义
    private static final String ENCODED_PASSWORD = "gameley";
    
    /**
     * *********************************************************** <br>
     * *说明：编码 <br>
     * @see <br>
     * @param str
     * @return <br>
     * @String <br>
     * @methods com.gameley.dmgtpf.common.utils.TokenEncryptUtils#encoded <br>
     * @author LiBencheng <br>
     * @date Created on 2021年7月26日 <br>
     * @time 下午7:51:27 <br>
     * @version 1.0 <br>
     *************************************************************          <br>
     */
    public static String encoded(String str)
    {
        return strToHex(encodedString(str, ENCODED_PASSWORD));
    }
    
    /**
     * *********************************************************** <br>
     * *说明：转换 <br>
     * @see <br>
     * @param str
     * @param password
     * @return <br>
     * @String <br>
     * @methods com.gameley.dmgtpf.common.utils.TokenEncryptUtils#encodedString <br>
     * @author LiBencheng <br>
     * @date Created on 2021年7月26日 <br>
     * @time 下午7:51:37 <br>
     * @version 1.0 <br>
     *************************************************************          <br>
     */
    private static String encodedString(String str, String password)
    {
        char[] pwd = password.toCharArray();
        int pwdLen = pwd.length;
        
        char[] strArray = str.toCharArray();
        for (int i = 0; i < strArray.length; i++)
        {
            strArray[i] = (char) (strArray[i] ^ pwd[i % pwdLen] ^ pwdLen);
        }
        return new String(strArray);
    }
    
    /**
     * *********************************************************** <br>
     * *说明： <br>
     * @see <br>
     * @param s
     * @return <br>
     * @String <br>
     * @methods com.gameley.dmgtpf.common.utils.TokenEncryptUtils#strToHex <br>
     * @author LiBencheng <br>
     * @date Created on 2021年7月26日 <br>
     * @time 下午7:51:46 <br>
     * @version 1.0 <br>
     *************************************************************          <br>
     */
    private static String strToHex(String s)
    {
        return bytesToHexStr(s.getBytes());
    }
    
    /**
     * *********************************************************** <br>
     * *说明： <br>
     * @see <br>
     * @param bytesArray
     * @return <br>
     * @String <br>
     * @methods com.gameley.dmgtpf.common.utils.TokenEncryptUtils#bytesToHexStr <br>
     * @author LiBencheng <br>
     * @date Created on 2021年7月26日 <br>
     * @time 下午7:51:50 <br>
     * @version 1.0 <br>
     *************************************************************          <br>
     */
    private static String bytesToHexStr(byte[] bytesArray)
    {
        StringBuilder builder = new StringBuilder();
        String hexStr;
        for (byte bt : bytesArray)
        {
            hexStr = Integer.toHexString(bt & 0xFF);
            if (hexStr.length() == 1)
            {
                builder.append("0");
                builder.append(hexStr);
            }
            else
            {
                builder.append(hexStr);
            }
        }
        return builder.toString();
    }
    
    /**
     * *********************************************************** <br>
     * *说明： 解码<br>
     * @see <br>
     * @param str
     * @return <br>
     * @String <br>
     * @methods com.gameley.dmgtpf.common.utils.TokenEncryptUtils#decoded <br>
     * @author LiBencheng <br>
     * @date Created on 2021年7月26日 <br>
     * @time 下午7:51:56 <br>
     * @version 1.0 <br>
     *************************************************************          <br>
     */
    public static String decoded(String str)
    {
        String hexStr = hexStrToStr(str);
        
        if (hexStr != null)
        {
            hexStr = encodedString(hexStr, ENCODED_PASSWORD);
        }
        return hexStr;
    }
    
    /**
     * *********************************************************** <br>
     * *说明： <br>
     * @see <br>
     * @param hexStr
     * @return <br>
     * @String <br>
     * @methods com.gameley.dmgtpf.common.utils.TokenEncryptUtils#hexStrToStr <br>
     * @author LiBencheng <br>
     * @date Created on 2021年7月26日 <br>
     * @time 下午7:53:07 <br>
     * @version 1.0 <br>
     *************************************************************          <br>
     */
    private static String hexStrToStr(String hexStr)
    {
        return new String(hexStrToBytes(hexStr));
    }
    
    /**
     * *********************************************************** <br>
     * *说明： <br>
     * @see <br>
     * @param hexStr
     * @return <br>
     * @byte[] <br>
     * @methods com.gameley.dmgtpf.common.utils.TokenEncryptUtils#hexStrToBytes <br>
     * @author LiBencheng <br>
     * @date Created on 2021年7月26日 <br>
     * @time 下午7:53:11 <br>
     * @version 1.0 <br>
     *************************************************************          <br>
     */
    private static byte[] hexStrToBytes(String hexStr)
    {
        String hex;
        int val;
        byte[] btHexStr = new byte[hexStr.length() / 2];
        for (int i = 0; i < btHexStr.length; i++)
        {
            hex = hexStr.substring(2 * i, 2 * i + 2);
            val = Integer.valueOf(hex, 16);
            btHexStr[i] = (byte) val;
        }
        return btHexStr;
    }
    
}
